Passa al contenuto principale

Controllo MQTT pianificato

suggerimento

Il controllo MQTT programmato è destinato a messaggi pianificati in anticipo. Per il controllo dal vivo, vedi invece Controllo MQTT dal vivo.

Questa guida ti aiuterà a configurare MQTT sul tuo SmartgridOne Controller per controllare e monitorare da remoto le installazioni di batterie e pannelli solari.

Cosa ti serve

  1. SmartgridOne Controller con connettività internet.
  2. Credenziali MQTT: queste possono essere richieste inviando un'email a support@eniris.be.
  3. Ambiente di sviluppo Python (o qualsiasi altro client MQTT). Questa guida utilizza un esempio di base scritto in Python per farti iniziare con MQTT e l'invio di comandi. Raccomandiamo di usare Python per la facilità d'uso, ma è supportato qualsiasi altro client MQTT.

Informazioni extra

MQTT è un protocollo di comunicazione veloce su internet. È un sistema di messaggistica publish/subscribe, che consente una connessione diretta tra la tua macchina e il SmartgridOne Controller. I tuoi beni sono classificati in gruppi di solare, batteria, veicoli elettrici e HVAC. Al momento, questa integrazione consente il controllo per gruppo, non per dispositivo.

Configurazione iniziale (Punto di partenza per i nuovi utenti)

Ho un SmartgridOne Controller che vorrei configurare per il controllo remoto MQTT.

1. Controlla la tua rete

Assicurati che la tua rete consenta il traffico mqtt sulla porta 1883. Puoi farlo usando il comando:

nc -zv mqtt.eniris.be 1883

Quando questo comando non è disponibile, puoi alternativamente scaricare ed eseguire questo codice python.

In caso di dubbi, consulta il tuo ingegnere di rete o usa temporaneamente l'hotspot 4G/5G del tuo telefono quando si verificano errori di connessione.

note

Quando la porta 1883 non è accessibile dalla tua rete, offriamo un backup sulla porta 80. Questo può essere configurato nel tuo client MQTT in un passaggio successivo di questo manuale.

2. Aggiungi i tuoi dispositivi

Accedi all'interfaccia di commissioning e assicurati che i dispositivi siano aggiunti al SmartgridOne Controller.

3. Aggiungi il segnale esterno MQTT

Immagine 1
Immagine 1
Immagine 1

4. Abilita il segnale remoto MQTT

Seleziona tutti i dispositivi che desideri includere nel controllo remoto MQTT.

Immagine 1

5. Il segnale remoto è stato aggiunto

L'interfaccia di controllo remoto MQTT è stata ora attivata sul SmartgridOne Controller.

Siamo ora pronti a inviare alcuni comandi di base utilizzando un semplice esempio. La colonna Stato ti indica se un comando è attivo.

Script demo Python

Un buon punto di partenza sarebbe testare la tua nuova integrazione con un semplice esempio.

Questo codice di test svolge un lavoro semplice di invio continuo del seguente programma:

  • Batteria: Carica a 5 kW per 15 minuti ogni 10 minuti
  • Solare: Imposta la potenza a 0 kW per un'ora ogni 30 minuti

Il SmartgridOne Controller risponde con un messaggio di riconoscimento contenente l'identificatore unico del programma, o un messaggio di errore.

Quindi recuperiamo il programma successivo per entrambi i tipi di dispositivo, confermando che il comando è stato eseguito con successo.

Per favore scarica il file qui sotto nel tuo IDE Python preferito. Compila il tuo numero di serie e le credenziali MQTT ed esegui lo script:

Quando sopra è riuscito, puoi continuare ad inviare altri tipi di messaggi. Tutti i messaggi sono descritti qui sotto.

Documentazione MQTT per l'invio di comandi

Questa sezione dettaglia il formato dei messaggi MQTT e i requisiti del payload per impostare il controllo programmato dei dispositivi all'interno della rete del SmartgridOne Controller.

Argomenti MQTT

  • Argomento di iscrizione: standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
  • Argomento di feedback: standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>

Dove <controller SN> deve essere sostituito con il numero di serie effettivo del SmartgridOne Controller che intendi controllare.

Tipi di messaggi MQTT

1. Imposta programma (set_schedule)

Crea un nuovo programma per un tipo di dispositivo.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"remove_overlap": <True/False> (Opzionale) (default=False),
"tag": <Tag String> (Opzionale) (default=None),
}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
"tag": <Tag String> (default=None),
},
"responseCode": 0
}
}

2. Imposta programmi (set_schedules)

Crea più nuovi programmi.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"remove_overlap": <True/False> (Opzionale) (default=False),
},
"1": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"remove_overlap": <True/False> (Opzionale) (default=False),
},
...
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Schedule IDs>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
},
"responseCode": 0
}
}

3. Ottieni programma (get_schedule)

Recupera un programma specifico per ID.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}

Risposta:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

4. Ottieni programma attivo (get_active_schedule)

Recupera il programma attualmente attivo per un tipo di dispositivo.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

5. Ottieni Prossimo Programma (get_next_schedule)

Recupera il prossimo programma in arrivo per un tipo di dispositivo.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

6. Ottieni Programmi (get_schedules)

Recupera tutti i programmi per una data specifica.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

7. Ottieni Programmi Futuri (get_future_schedules)

Recupera tutti i programmi futuri.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

8. Rimuovi Programma (remove_schedule)

Rimuove un programma specifico per ID.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Programma <Schedule ID> rimosso con successo",
"responseCode": 0
}
}

9. Ottieni Feedback sul Sito (get_feedback)

Recupera feedback dettagliato sullo stato del sistema.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}

Risposta (Successo):

Struttura del Payload di Feedback

10. Topologia del Sito (get_toplogy)

Ottiene la topologia del sito.

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}

Risposta (Successo):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"nodeType": <nodeType>,
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}

Formato di Risposta Standard per i Programmi

{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}

Tipi di Componenti e Politiche

Per dettagli sui componenti disponibili e le politiche che possono essere programmate, fare riferimento alla sezione MQTT Components and Policies nella documentazione Live MQTT Control.

I programmi specifici dei dispositivi possono essere inviati utilizzando il campo opzionale node_id, facendo riferimento all'ID del nodo del dispositivo controllabile.

Gestione degli Errori

Tutti i messaggi possono restituire una risposta di errore con responseCode: 1 quando si verifica un errore:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}

Quando si verifica un errore non correlato, il tipo di messaggio sarà (general_error).

Errori comuni includono:

  • Sovrapposizione del programma con programmi esistenti
  • Intervallo di tempo non valido
  • Tipo di dispositivo non trovato
  • ID del programma non trovato
  • Politica non valida per il tipo di dispositivo

Regole di Gestione dei Programmi

  1. Regole di Sovrapposizione
    • I programmi non possono sovrapporsi per lo stesso tipo di dispositivo
    • I programmi non possono sovrapporsi per lo stesso dispositivo
    • I programmi per lo stesso dispositivo e tipo di dispositivo non possono sovrapporsi
    • I programmi esistenti e sovrapposti saranno eliminati se la variabile remove_overlap è impostata su True quando si crea un nuovo programma.
  2. Ogni programma deve avere:
    • Un tipo di dispositivo valido
    • Un orario di inizio (timestamp Unix)
    • Un orario di fine (timestamp Unix)
    • Una politica (che corrisponde alle politiche disponibili del tipo di dispositivo)
    • Un setpoint di potenza (per le politiche che lo richiedono)
  3. L'ora di inizio deve essere precedente all'ora di fine
  4. Se l'ora di inizio è nel passato, viene automaticamente cambiata per iniziare ora
  5. I programmi possono essere eliminati solo se non sono ancora iniziati. I programmi attivi non possono essere eliminati.
  6. I programmi possono essere impostati per diversi tipi di dispositivo indipendentemente
  7. Il sistema applica automaticamente la politica appropriata quando un programma diventa attivo